# working institution:School of Mathematical Sciences,Zhejiang University
# author:Kangjie Ding
# date:2022/11/22 19:08
import pygame.font
from pygame.sprite import Group
import ship

class Scoreboard:
    """显示得分信息的类"""
    def __init__(self,ai_game):
        """初始化显示得分涉及的属性"""
        self.ai_game=ai_game
        self.screen=ai_game.screen
        self.screen_rect=self.screen.get_rect()
        self.settings=ai_game.settings
        self.stats=ai_game.stats
        #显示得分信息时使用的字体设置
        self.text_color=(30,30,30)
        self.font=pygame.font.SysFont(None,48)
        #准备初始得分图像和最高得分图像
        self.pre_score()
        self.pre_high_score()
        self.pre_level()
        self.pre_ships()

    def pre_score(self):
        """将得分转化为渲染的图像"""
        score_str="{:,}".format(self.stats.score)
        self.score_image=self.font.render(f"scores:{score_str}",
                                          True,self.text_color,self.settings.bg_color)
        #在屏幕右上角显示得分
        self.score_rect=self.score_image.get_rect()
        self.score_rect.right=self.screen_rect.right-20
        self.score_rect.top=20

    def pre_high_score(self):
        """将最高得分转换为渲染图像"""
        high_score_str="{:,}".format(self.stats.high_score)
        self.high_score_image=self.font.render\
            (f"highest scores:{high_score_str}",True,self.text_color,self.settings.bg_color)
        #将最高得分放在屏幕顶部中央
        self.high_score_rect=self.high_score_image.get_rect()
        self.high_score_rect.centerx=self.screen_rect.centerx
        self.high_score_rect.top=self.score_rect.top

    def pre_level(self):
        """将等级转换为渲染的图像"""
        level_str=str(self.stats.level)
        self.level_image=self.font.render(f"level:{level_str}",True,self.text_color,
                                          self.settings.bg_color)
        #将等级放在得分下面
        self.level_rect=self.level_image.get_rect()
        self.level_rect.right=self.score_rect.right
        self.level_rect.top=self.score_rect.bottom+10

    def pre_ships(self):
        """显示还余下多少飞船"""
        self.ships=Group()
        for ship_num in range(self.stats.ships_left):
            this_ship=ship.Ship(self.ai_game)
            this_ship.rect.x=10+ship_num*this_ship.rect.width
            this_ship.rect.y=10
            self.ships.add(this_ship)

    def show_score(self):
        """显示得分"""
        self.screen.blit(self.score_image,self.score_rect)
        self.screen.blit(self.high_score_image,self.high_score_rect)
        self.screen.blit(self.level_image,self.level_rect)
        self.ships.draw(self.screen)

    def check_high_score(self):
        """检查当前得分是否是最高得分"""
        if self.stats.score>self.stats.high_score:
            self.stats.high_score=self.stats.score
            self.pre_high_score()